Play framework 2.0 betaが出たようです10 – Pluginをつくってみる

Play framework 2.0 betaが出たようです10 – Pluginをつくってみる

Clock Icon2012.01.29

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

Pluginをつくる

Play framework2.0では標準でCachePluginやGlobalPlugin等を持っていますが、独自のプラグインを作成することも簡単にできます。 これによって任意のタイミングで様々な処理行うことが可能です。 それでは試してみましょう。

今回使用した動作環境は以下のとおりです。

  • OS : MacOS X 10.7.2
  • Playframework : HEAD
  • Java : 1.6.0_26
  • Eclipse : 3.7

注意: この記事ではgithubから取得したHEAD版を使用して試しています。 正式リリース前の状況のため思わぬ不具合が生じるかもしれませんので、ご了承ください。

ソースのHEADを取得してセットアップ

まだgithubからソースを取得していない人は、play2.0のソースを取得してビルドしましょう。

$ git clone https://github.com/playframework/Play20.git
$ cd Play20/framework
$ ./build
> complile
> build-repository
> publish-local

すでにソースを取得している人は、最新の状態に更新してビルドします。

$ git pull
$ cd Play20/framework
$ ./build
> compile
> build-repository
> publish-local

これで準備ができました。

プロジェクト作成

Scalaベースのプロジェクトを作成し、sbtコンソールを起動します。

% play new myPluginApp
% cd myPluginApp
% play

eclipsifyを実行してeclipseプロジェクト化してインポートしてソースの修正をしましょう。

>[myPluginApp] $ eclipsify

プラグインを追加する

プラグインの追加は簡単です。 まずはプラグインの本体である、MyPluginクラスを作成します。 MyPluginAppディレクトリ直下にpluginディレクトリを作成し、その中にMyPlugin.scalaファイルを作成しましょう。

package sample.plugin

import play.api._

class MyPlugin(app: Application) extends Plugin {

  override lazy val enabled = {
    Logger.debug(app.configuration.toString())
    true
  }
  override def onStart() {
    Logger.debug("MyPlugin#onStart")
  }

  override def onStop() {
    Logger.debug("MyPlugin#onStop")
  }

}

プラグインとしてクラスを実装するには、下記条件を満たしていれば大丈夫です。

  • play.api.Pluginを継承
  • enabledメソッドをオーバーライド
  • onStartメソッドをオーバーライド
  • onStopメソッドをオーバーライド

コンストラクタでうけとっているappとは、アプリケーション自体を表すオブジェクトです。 このappを経由すれば、conf/application.confにアクセスすることも可能です。

最後にconfディレクトリに、play.pluginsという名前でファイルを作成します。 ここでプラグインの起動する優先順位とクラス名を記述します。

5000:sample.plugin.MyPlugin

アプリケーションを起動してブラウザでアクセスしてみてください。 アクセス時にはonStart、アプリケーション終了時にはonStopが実行されます。

>[myPluginApp] $ compile
>[myPluginApp] $ run

まとめ

今回はプラグインを作成してみました。 とても簡単に作成できますし、利用頻度は多そうですね。

参考サイトなど

Share this article

facebook logohatena logotwitter logo

© Classmethod, Inc. All rights reserved.